home *** CD-ROM | disk | FTP | other *** search
/ Java 1996 August / Java - Summer 1996.iso / kaffe-0.2 / kaffe / thread.h < prev    next >
C/C++ Source or Header  |  1996-02-19  |  2KB  |  88 lines

  1. /*
  2.  * thread.h
  3.  * Thread support.
  4.  *
  5.  * Copyright (c) 1996 Systems Architecture Research Centre,
  6.  *           City University, London, UK.
  7.  *
  8.  * See the file "license.terms" for information on usage and redistribution
  9.  * of this file, and for a DISCLAIMER OF ALL WARRANTIES.
  10.  *
  11.  * Written by Tim Wilkinson <tim@sarc.city.ac.uk>, February 1996.
  12.  */
  13.  
  14. #ifndef __thread_h
  15. #define __thread_h
  16.  
  17. #define    THREADCLASS        "java/lang/Thread"
  18.  
  19. #define    MIN_THREAD_PRIO        1
  20. #define    NORM_THREAD_PRIO    5
  21. #define    MAX_THREAD_PRIO        10
  22.  
  23. #define    THREAD_SUSPENDED    0
  24. #define    THREAD_RUNNING        1
  25. #define    THREAD_DEAD        2
  26.  
  27. typedef struct _ctx {
  28.     void*            restorePoint;
  29.     void*            stackBase;
  30.     void*            stackEnd;
  31. } ctx;
  32.  
  33. struct _stringClass;
  34. struct _object;
  35.  
  36. /* This structure mirrors java.lang.ThreadGroup.h */
  37. typedef struct _threadGroup {
  38.     object            obj;
  39.     struct _threadGroup*    parent;
  40.     struct _stringClass*    name;
  41.     long            maxPrio;
  42.     long            destroyed;
  43.     long            daemon;
  44.     long            nthreads;
  45.     struct _object*        threads;
  46.     long            ngroups;
  47.     struct _object*        groups;
  48. } threadGroup;
  49.  
  50. /* This structure mirrors java.lang.Thread.h */
  51. typedef struct _thread {
  52.     object            obj;
  53.     object*            name;
  54.     long            priority;
  55.     struct _thread*        next;
  56.     long            PrivateInfo;
  57.     ctx*            eetop;
  58.     long            single_step;
  59.     long            daemon;
  60.     long            stillborn;
  61.     object*            target;
  62.     threadGroup*        group;
  63. } thread;
  64.  
  65. extern thread* currentThread;
  66.  
  67. void initThreads(void);
  68. void startThread(thread*);
  69. void resumeThread(thread*);
  70. void suspendThread(thread*);
  71. void suspendOnQThread(thread*, thread**);
  72. void yieldThread(void);
  73. void killThread(thread*);
  74. void setPriorityThread(thread*, int);
  75.  
  76. void reschedule(void);
  77.  
  78. extern int blockInts;
  79. extern bool needReschedule;
  80.  
  81. #define    intsDisable()    blockInts++
  82. #define    intsRestore()    if (blockInts == 1 && needReschedule == true) {    \
  83.                 reschedule();                \
  84.             }                        \
  85.             blockInts--
  86.  
  87. #endif
  88.